home *** CD-ROM | disk | FTP | other *** search
/ CICA 1995 September (Japanese) / CICA Shareware for Windows CD-ROM (Walnut Creek) (September 1995) (Japanese) (Disc 2).iso / disc2 / demo / recdemo.exe / SETUPAPI.IN_ / SETUPAPI.bin
Encoding:
Text File  |  1993-07-10  |  55.8 KB  |  1,844 lines

  1. '**************************************************************************
  2. '*******************************  Windows API's  **************************
  3. '**************************************************************************
  4. GLOBAL hSetup AS INTEGER
  5. GLOBAL fFrameInit AS INTEGER
  6. GLOBAL fInstallInit AS INTEGER
  7.  
  8. CONST SM_CXSCREEN = 0
  9. CONST SM_CYSCREEN = 1
  10.  
  11. CONST WF_80x87    = 1024
  12. CONST WF_CPU186   =  128
  13. CONST WF_CPU286   =    2
  14. CONST WF_CPU386   =    4
  15. CONST WF_CPU486   =    8
  16. CONST WF_STANDARD =   16
  17. CONST WF_ENHANCED =   32
  18.  
  19.  
  20. '' DoMsgBox Flags
  21.  
  22. CONST MB_OK                = 0
  23. CONST MB_YESNO             = 4
  24. CONST MB_OKCANCEL             = 1
  25. CONST MB_ABORTRETRYIGNORE  = 2
  26. CONST MB_YESNOCANCEL          = 3
  27. CONST MB_RETRYCANCEL          = 5
  28. CONST MB_ICONHAND          = 16
  29. CONST MB_TASKMODAL         = 8192
  30. CONST MB_ICONQUESTION       = 32
  31. CONST MB_ICONEXCLAMATION   = 48
  32. CONST MB_ICONASTERISK      = 64
  33. CONST MB_ICONINFORMATION   = 64
  34. CONST MB_ICONSTOP             = 16
  35.  
  36.  
  37. DECLARE FUNCTION DoMsgBox LIB "mscomstf.dll" (lpText$,lpCaption$,wType%) As INTEGER
  38. DECLARE FUNCTION GetWindowsDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  39. DECLARE FUNCTION GetSystemDirectory LIB "kernel" (szBuf$, cbBuf%) AS INTEGER
  40. DECLARE FUNCTION GetProfileString LIB "kernel" (szSect$, szKey$, szDefault$, szBuf$, cbBuf%) AS INTEGER
  41. DECLARE FUNCTION GetVersion LIB "kernel" AS INTEGER
  42. DECLARE FUNCTION GetSystemMetrics LIB "user" (nIndex%) AS INTEGER
  43. DECLARE FUNCTION LoadLibrary LIB "kernel" (lpszName$) AS INTEGER
  44. DECLARE SUB FreeLibrary LIB "kernel" (hInstance%) 
  45. DECLARE FUNCTION GetWinFlags LIB "kernel" AS LONG
  46. DECLARE FUNCTION WinExec LIB "kernel" (lpszName$, nShow%) AS INTEGER
  47. DECLARE FUNCTION ShowWindow LIB "user" (Handle%, Mode%) AS INTEGER
  48. DECLARE FUNCTION ExitWindows LIB "user" (ExitCode%, Mode%) AS INTEGER
  49.  
  50.  
  51. DECLARE FUNCTION IsShareInstalled     LIB "ocsetup.dll" (AutoexecBat$) AS INTEGER
  52. DECLARE FUNCTION AddShareToAutoexec LIB "ocsetup.dll" (AutoexecBat$, AutoexecBack$, ShareExePath$) AS INTEGER
  53. DECLARE FUNCTION UpdateConfigSys     LIB "ocsetup.dll" (ConfigSys$, ConfigBack$, NumFiles%, NumBuffers%) AS INTEGER
  54. DECLARE FUNCTION Ctl3dRegister      LIB "ctl3d.dll" (hWnd%) AS INTEGER
  55. DECLARE FUNCTION Ctl3dUnRegister    LIB "ctl3d.dll" (hWnd%) AS INTEGER
  56. DECLARE FUNCTION Ctl3dAutoSubClass  LIB "ctl3d.dll" (hWnd%) AS INTEGER
  57.  
  58.  
  59.  
  60. '**************************************************************************
  61. '****************************** Setup Constants ***************************
  62. '**************************************************************************
  63.  
  64.  
  65. ''Command Option Flags
  66.  
  67. CONST cmoVital       = 1
  68. CONST cmoCopy        = 2
  69. CONST cmoUndo        = 4
  70. CONST cmoRoot        = 8
  71. CONST cmoDecompress  = 16
  72. CONST cmoTimeStamp   = 32
  73. CONST cmoReadOnly    = 64
  74. CONST cmoBackup      = 128
  75. CONST cmoForce       = 256
  76. CONST cmoRemove      = 512
  77. CONST cmoOverwrite   = 1024
  78. CONST cmoAppend      = 2048
  79. CONST cmoPrepend     = 4096
  80. CONST cmoNone        = 0
  81. CONST cmoAll         = 65535
  82.  
  83.  
  84. ''File Exist Modes
  85.  
  86. CONST femExists     = 0
  87. CONST femRead       = 1
  88. CONST femWrite      = 2
  89. CONST femReadWrite  = 3
  90.  
  91.  
  92. ''Read-Only Return Code
  93.  
  94. CONST ynrcNo         = 0
  95. CONST ynrcYes        = 1
  96. CONST ynrcErr1       = 2
  97. CONST ynrcErr2       = 3
  98. CONST ynrcErr3       = 4
  99. CONST ynrcErr4       = 5
  100. CONST ynrcErr5       = 6
  101. CONST ynrcErr6       = 7
  102. CONST ynrcErr7       = 8
  103. CONST ynrcErr8       = 9
  104. CONST ynrcErr9       = 10
  105.  
  106.  
  107. ''General Return Codes
  108.  
  109. CONST grcOkay       = 0
  110. CONST grcNotOkay    = 1
  111. CONST grcUserQuit   = 48
  112.  
  113.  
  114. ''Ranges
  115.  
  116. ''CONST cbSymValMax = 8192
  117. CONST cbSymValMax = 512
  118.     ''REVIEW: symbol table will allow strings up to 8192 bytes
  119.     '' but we get Out of String Space wattdrvr error if we alloc
  120.     '' STRING$() that big. (See GetSymbolValue and GetListItem)
  121.     '' We should look into using dynamic far alloc instead of
  122.     '' STRING$ for large buffers.
  123.     '' NOTE: 8192 works okay with runtime wattdrvr, however.
  124.  
  125.  
  126. ''ON ERROR Error Codes
  127. CONST STFERR      = 1024   ''setup system error
  128. CONST STFQUIT     = 1025   ''user quit
  129.  
  130. CONST scmOff      = 0
  131. CONST scmOnIgnore = 1
  132. CONST scmOnFatal  = 2
  133.  
  134.  
  135. '**************************************************************************
  136. '********************************  Setup API's  ***************************
  137. '**************************************************************************
  138.  
  139. '' common
  140.  
  141. DECLARE FUNCTION FParseFATPathIntoPieces LIB "mscomstf.dll" (szPath$, szVol$, cbVol%, szDir$, cbDir%, szFile$, cbFile%) AS INTEGER
  142. DECLARE FUNCTION FOpenInf LIB "mscomstf.dll" (szFile$, fCheck%, fCheckSyms%) AS INTEGER
  143. DECLARE FUNCTION FSetSilent LIB "mscomstf.dll" (mode%) AS INTEGER
  144. DECLARE FUNCTION FSetBeepingMode LIB "mscomstf.dll" (mode%) AS INTEGER
  145. DECLARE FUNCTION HShowWaitCursor LIB "msshlstf.dll" AS INTEGER
  146. DECLARE FUNCTION FRestoreCursor  LIB "msshlstf.dll" (hPrev%) AS INTEGER
  147. DECLARE FUNCTION FOpenLogFile    LIB "mscomstf.dll" (szFile$, fAppend%) AS INTEGER
  148. DECLARE FUNCTION FCloseLogFile   LIB "mscomstf.dll" AS INTEGER
  149. DECLARE FUNCTION FWriteToLogFile LIB "mscomstf.dll" (sz$, fRequire%) AS INTEGER
  150. DECLARE FUNCTION CbGetInfSectionKeyField LIB "mscomstf.dll" (szSect$, szKey$, iField%, szBuf$, cbBuf%) AS INTEGER
  151. DECLARE FUNCTION FMakeListInfSectionField LIB "mscomstf.dll" (szSym$, szSect$, iField%) AS INTEGER
  152.  
  153.  
  154. ''shell
  155.  
  156. DECLARE FUNCTION FSetBitmap LIB "msshlstf.dll" (szDll$, Bitmap%) AS INTEGER
  157. DECLARE FUNCTION FSetAbout LIB "msshlstf.dll" (szAbout1$, szAbout2$) AS INTEGER
  158. DECLARE FUNCTION FDoDialog LIB "msuilstf.dll" (hwnd%, szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS INTEGER
  159. DECLARE FUNCTION FKillNDialogs LIB "msuilstf.dll" (n%) AS INTEGER
  160. DECLARE SUB SetWindowText LIB "User" (hwnd%, lpString$)
  161. DECLARE FUNCTION FSetSymbolValue LIB "msshlstf.dll" (szSymbol$, szValue$) AS INTEGER
  162. DECLARE FUNCTION FRemoveSymbol LIB "mscomstf.dll" (szSym$) AS INTEGER
  163. DECLARE FUNCTION CbGetSymbolValue LIB "mscomstf.dll" (szSymbol$, szValue$, Length%) AS INTEGER
  164. DECLARE FUNCTION UsGetListLength LIB "mscomstf.dll" (szSymbol$) AS INTEGER
  165. DECLARE FUNCTION CbGetListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$, cbMax%) AS INTEGER
  166. DECLARE FUNCTION FAddListItem LIB "mscomstf.dll" (szListSymbol$, szListItem$) AS INTEGER
  167. DECLARE FUNCTION FReplaceListItem LIB "mscomstf.dll" (szListSymbol$, n%, szListItem$) AS INTEGER
  168. DECLARE FUNCTION FSetSymbolToListOfInfKeys LIB "mscomstf.dll" (szSym$, szSect$, fNulls%) AS INTEGER
  169.  
  170.  
  171. ''shell
  172.  
  173. DECLARE FUNCTION InitializeFrame LIB "msshlstf.dll" (szCmdLine$) AS INTEGER
  174. DECLARE FUNCTION HwndFrame LIB "msshlstf.dll" AS INTEGER
  175. DECLARE FUNCTION HinstFrame LIB "msshlstf.dll" AS INTEGER
  176.  
  177.  
  178.  
  179. ''install
  180.  
  181. DECLARE SUB      ProSetPos LIB "msinsstf.dll" (x%, y%)
  182. DECLARE FUNCTION FCreateDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  183. DECLARE FUNCTION FRemoveDir LIB "msinsstf.dll" (szDir$, cmo%) AS INTEGER
  184. DECLARE FUNCTION FAddSectionFilesToCopyList LIB "mscomstf.dll" (szSect$, szSrc$, szDest$) AS INTEGER
  185. DECLARE FUNCTION FAddSectionKeyFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  186. DECLARE FUNCTION FAddSpecialFileToCopyList LIB "mscomstf.dll" (szSect$, szKey$, szSrc$, szDest$) AS INTEGER
  187. DECLARE FUNCTION GrcCopyFilesInCopyList LIB "msinsstf.dll" (hInstance%) AS INTEGER
  188. DECLARE FUNCTION FRemoveIniSection LIB "msinsstf.dll" (szFile$, szSect$, cmo%) AS INTEGER
  189. DECLARE FUNCTION FCreateIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  190. DECLARE FUNCTION FRemoveIniKey LIB "msinsstf.dll" (szFile$, szSect$, szKey$, cmo%) AS INTEGER
  191. DECLARE FUNCTION FCreateSysIniKeyValue LIB "msinsstf.dll" (szFile$, szSect$, szKey$, szValue$, cmo%) AS INTEGER
  192. DECLARE FUNCTION FCreateProgManGroup LIB "msinsstf.dll" (szGroup$, szPath$, cmo%) AS INTEGER
  193. DECLARE FUNCTION FCreateProgManItem LIB "msinsstf.dll" (szGroup$, szItem$, szCmd$, cmo%) AS INTEGER
  194. DECLARE FUNCTION FShowProgManGroup LIB "msinsstf.dll" (szGroup$, szCmd$, cmo%) AS INTEGER
  195. DECLARE FUNCTION FStampResource LIB "msinsstf.dll" (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) AS INTEGER
  196. DECLARE FUNCTION FDumpCopyListToFile LIB "msinsstf.dll" (szFile$) AS INTEGER
  197. DECLARE SUB      ResetCopyList LIB "msinsstf.dll"
  198. DECLARE FUNCTION LcbGetCopyListCost LIB "msinsstf.dll" (szExtraList$, szCostList$, szNeedList$) AS LONG
  199. DECLARE FUNCTION FAddDos5Help LIB "msinsstf.dll" (szProgName$, szProgHelp$, cmo%) AS INTEGER
  200. DECLARE FUNCTION FCopyOneFile LIB "msinsstf.dll" (szSrc$, szDest$, cmo%, fAppend%) AS INTEGER
  201. DECLARE FUNCTION YnrcRemoveFile LIB "msinsstf.dll" (szFullPathSrc$, cmo%) AS INTEGER
  202. DECLARE FUNCTION YnrcBackupFile LIB "msinsstf.dll" (szFullPath$, szBackup$, cmo%) AS INTEGER
  203. DECLARE FUNCTION FInitializeInstall LIB "msinsstf.dll" (hinst%, hwndFrame%) AS INTEGER
  204. DECLARE FUNCTION WFindFileUsingFileOpen LIB "msinsstf.dll" (szFile$, szBuf$, cbBuf%) AS INTEGER
  205. DECLARE FUNCTION FIsDirWritable LIB "msinsstf.dll" (szDir$) AS INTEGER
  206. DECLARE FUNCTION FIsFileWritable LIB "msinsstf.dll" (szFile$) AS INTEGER
  207. DECLARE FUNCTION FAddToBillboardList LIB "msinsstf.dll" (szDll$, idDlg%, szProc$, lTicks&) AS INTEGER
  208. DECLARE FUNCTION FClearBillboardList LIB "msinsstf.dll" AS INTEGER
  209. DECLARE FUNCTION FSetRestartDir LIB "msinsstf.dll" (szDir$) AS INTEGER
  210. DECLARE FUNCTION FRestartListEmpty LIB "msinsstf.dll" AS INTEGER
  211. DECLARE FUNCTION FExitExecRestart LIB "msinsstf.dll" AS INTEGER
  212. DECLARE FUNCTION SetCopyMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  213. DECLARE FUNCTION GetCopyMode LIB "msinsstf.dll" AS INTEGER
  214. DECLARE FUNCTION SetDecompMode LIB "msinsstf.dll" (fMode%) AS INTEGER
  215. DECLARE FUNCTION GetDecompMode LIB "msinsstf.dll" AS INTEGER
  216. DECLARE FUNCTION SetSizeCheckMode LIB "msinsstf.dll" (scmMode%) AS INTEGER
  217. DECLARE FUNCTION FPrependToPath LIB "msinsstf.dll" (szSrc$, szDst$, szDir$, cmo%) AS INTEGER
  218.  
  219. DECLARE FUNCTION SetTimeValue LIB "msinsstf.dll" (usHours%, usMinutes%, usSeconds%) AS INTEGER
  220.  
  221.  
  222.  
  223. '*************************************************************************
  224. '****************  Setup Basic Wrapper Declarations  *********************
  225. '*************************************************************************
  226.  
  227.  
  228. ''shell
  229.  
  230. DECLARE SUB SetBitmap(szDll$, Bitmap%)
  231. DECLARE SUB SetAbout(szAbout1$, szAbout2$)
  232. DECLARE FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) AS STRING
  233. DECLARE SUB UIPop (n%)
  234. DECLARE SUB UIPopAll
  235. DECLARE SUB SetTitle (sz$)
  236. DECLARE SUB ReadInfFile (szFile$)
  237. DECLARE SUB SetSymbolValue (szSymbol$, szValue$)
  238. DECLARE SUB RemoveSymbol (szSym$)
  239. DECLARE FUNCTION GetSymbolValue (szSymbol$) AS STRING
  240. DECLARE FUNCTION GetListLength(szSymbol$) AS INTEGER
  241. DECLARE SUB MakeListFromSectionKeys (szSymbol$, szSect$)
  242. DECLARE FUNCTION GetListItem(szSymbol$, n%) AS STRING
  243. DECLARE SUB AddListItem(szSymbol$, szItem$)
  244. DECLARE SUB ReplaceListItem(szSymbol$, n%, szItem$)
  245.  
  246. DECLARE FUNCTION InitFrame (szCmdLine$) AS INTEGER
  247. DECLARE FUNCTION InitSetup (szCmdLine$) AS INTEGER
  248.  
  249. DECLARE FUNCTION ShowWaitCursor AS INTEGER
  250. DECLARE SUB RestoreCursor (hPrev%)
  251.  
  252. DECLARE FUNCTION SetBeepingMode (mode%) AS INTEGER
  253. DECLARE FUNCTION SetSilentMode (mode%) AS INTEGER
  254.  
  255. DECLARE FUNCTION GetSectionKeyDate (szSect$, szKey$) AS STRING
  256. DECLARE FUNCTION GetSectionKeyFilename (szSect$, szKey$) AS STRING
  257. DECLARE FUNCTION GetSectionKeySize (szSect$, szKey$) AS LONG
  258. DECLARE FUNCTION GetSectionKeyVersion (szSect$, szKey$) AS STRING
  259.  
  260. DECLARE SUB MakeListFromSectionDate (szSym$, szSect$)
  261. DECLARE SUB MakeListFromSectionFilename (szSym$, szSect$)
  262. DECLARE SUB MakeListFromSectionSize (szSym$, szSect$)
  263. DECLARE SUB MakeListFromSectionVersion (szSym$, szSect$)
  264.  
  265.  
  266. ''install
  267.  
  268.  
  269. DECLARE SUB CreateDir (szDir$, cmo%)
  270. DECLARE SUB RemoveDir (szDir$, cmo%)
  271. DECLARE SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$)
  272. DECLARE SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  273. DECLARE SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$)
  274. DECLARE SUB CopyFilesInCopyList
  275. DECLARE SUB RemoveIniSection (szFile$, szSect$, cmo%)
  276. DECLARE SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  277. DECLARE SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%)
  278. DECLARE SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%)
  279. DECLARE SUB CreateProgmanGroup (szGroup$, szPath$, cmo%)
  280. DECLARE SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%)
  281. DECLARE SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%)
  282. DECLARE SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%)
  283. DECLARE SUB DumpCopyList (szFile$)
  284. DECLARE SUB ClearCopyList
  285. DECLARE FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) AS LONG
  286. DECLARE SUB AddDos5Help (szProgName$, szProgHelp$, cmo%)
  287. DECLARE SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%)
  288. DECLARE SUB RemoveFile (szFullPathSrc$, cmo%)
  289. DECLARE SUB BackupFile (szFullPath$, szBackup$)
  290. DECLARE SUB RenameFile (szFullPath$, szBackup$)
  291. DECLARE SUB InitInstall
  292. DECLARE SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&)
  293. DECLARE SUB AddBlankToBillboardList (lTicks&)
  294. DECLARE SUB ClearBillboardList
  295. DECLARE SUB OpenLogFile (szFile$, fAppend%)
  296. DECLARE SUB CloseLogFile
  297. DECLARE SUB WriteToLogFile (szStr$)
  298. DECLARE SUB SetCopyGaugePosition (x%, y%)
  299. DECLARE SUB SetRestartDir(szDir$)
  300. DECLARE FUNCTION RestartListEmpty AS INTEGER
  301. DECLARE FUNCTION ExitExecRestart AS INTEGER
  302. DECLARE FUNCTION FindFileUsingFileOpen (szFile$) AS STRING
  303. DECLARE FUNCTION IsDirWritable (szDir$) AS INTEGER
  304. DECLARE FUNCTION IsFileWritable (szFile$) AS INTEGER
  305. DECLARE FUNCTION GetNthFieldFromIniString (szLine$, iField%) AS STRING
  306. DECLARE SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%)
  307.  
  308.  
  309. '' Error Handling
  310.  
  311. '$ifdef DEBUG
  312.  
  313. '' Setup API Errors
  314. CONST saeFail   = 0
  315. CONST saeInit   = 1
  316. CONST saeNYI    = 3
  317. CONST saeArg    = 4    ''must be max sae value
  318.  
  319. DECLARE SUB StfApiErr (nMsg%, szApi$, szArgs$)
  320. DECLARE SUB BadArgErr (nArg%, szApi$, szArgs$)
  321.  
  322. '' chk arg
  323. DECLARE FUNCTION FValidFATDir LIB "mscomstf.dll" (szDir$) AS INTEGER
  324. DECLARE FUNCTION CchlValidFATSubPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  325. DECLARE FUNCTION FValidFATPath LIB "mscomstf.dll" (szPath$) AS INTEGER
  326. DECLARE FUNCTION FValidDrive (szDrive$) AS INTEGER
  327.  
  328. DECLARE FUNCTION FValidInfSect (szSect$) AS INTEGER
  329. DECLARE FUNCTION FValidIniFile (szFile$) AS INTEGER
  330.  
  331. '$endif ''DEBUG
  332.  
  333.  
  334.  
  335. '' Windows system detect
  336.  
  337. DECLARE FUNCTION GetWindowsMajorVersion AS INTEGER
  338. DECLARE FUNCTION GetWindowsMinorVersion AS INTEGER
  339. DECLARE FUNCTION GetWindowsMode AS INTEGER
  340. DECLARE FUNCTION GetWindowsDir  AS STRING
  341. DECLARE FUNCTION GetWindowsSysDir AS STRING
  342. DECLARE FUNCTION IsWindowsShared AS INTEGER
  343. DECLARE FUNCTION GetScreenWidth AS INTEGER
  344. DECLARE FUNCTION GetScreenHeight AS INTEGER
  345. DECLARE FUNCTION StripPath (szPath$) AS STRING
  346.  
  347. FUNCTION StripPath (szPath$) STATIC AS STRING
  348.   ln% = LEN(szPath$)
  349.   tmp1% = 0
  350.   FOR x% = ln% TO 1 STEP -1
  351.     IF MID$(szPath$, x%, 1) = "\" THEN
  352.       tmp1% = x% - 1
  353.       x% = 1
  354.     ENDIF
  355.   NEXT 
  356.  
  357.   IF tmp1% = 0 THEN
  358.     StripPath = szPath$
  359.   ELSE
  360.     StripPath = MID$(szPath$, 1, tmp1%)
  361.   ENDIF
  362. END FUNCTION
  363.  
  364.  
  365. '*************************************************************************
  366. '*****************  Setup Basic Wrapper Definitions  *********************
  367. '*************************************************************************
  368. FUNCTION InitSetup(szCmdLine$) STATIC AS INTEGER
  369.     fFrameInit = 0
  370.     fInstallInit = 0
  371.  
  372.     IF hSetup > 0 THEN
  373. '$ifdef DEBUG
  374.         StfApiErr saeInit, "InitSetup", szCmdLine$
  375. '$endif ''DEBUG
  376.     END IF
  377.  
  378.     i% = InitFrame(szCmdLine$)
  379.     fFrameInit = 1
  380.  
  381.     InitInstall
  382.     fInstallInit = 1
  383.  
  384.     InitSetup = i%
  385. END FUNCTION
  386.  
  387.  
  388.  
  389. '**************************************************************************
  390. FUNCTION InitFrame(szCmdLine$) STATIC AS INTEGER
  391.     IF hSetup > 0 THEN
  392. '$ifdef DEBUG
  393.         StfApiErr saeInit, "InitFrame", szCmdLine$
  394. '$endif ''DEBUG
  395.     ELSE
  396.         i% = InitializeFrame(szCmdLine$)
  397.         IF i% = -1 THEN
  398.             END   '' NOT an error - Usage (/?) or Command line copy operation
  399.         ELSEIF i% = 0 THEN
  400. '$ifdef DEBUG
  401.             StfApiErr saeFail, "InitFrame", szCmdLine$
  402. '$endif ''DEBUG
  403.             END
  404.         ELSE
  405.             InitFrame = i%
  406.         END IF
  407.     END IF
  408. END FUNCTION
  409.  
  410.  
  411. '**************************************************************************
  412. SUB SetBitmap(szDll$, Bitmap%) STATIC
  413.     IF FSetBitmap(szDll$, Bitmap%) = 0 THEN
  414. '$ifdef DEBUG
  415.         StfApiErr saeFail, "SetBitmap", szDll$+","+STR$(Bitmap%)
  416. '$endif ''DEBUG
  417.         ERROR STFERR
  418.     END IF
  419. END SUB
  420.  
  421.  
  422. '**************************************************************************
  423. SUB SetAbout(szAbout1$, szAbout2$) STATIC
  424.     IF FSetAbout(szAbout1$, szAbout2$) = 0 THEN
  425. '$ifdef DEBUG
  426.         StfApiErr saeFail, "SetAbout", szAbout1$ + "," + szAbout2$
  427. '$endif ''DEBUG
  428.         ERROR STFERR
  429.     END IF
  430. END SUB
  431.  
  432.  
  433. '*************************************************************************
  434. SUB SetTitle(sz$) STATIC
  435.     SetWindowText HwndFrame(), sz$
  436. END SUB
  437.  
  438.  
  439. '*************************************************************************
  440. SUB ReadInfFile (szFile$) STATIC
  441. '$ifdef DEBUG
  442.     if FValidFATPath(szFile$) = 0 then
  443.         BadArgErr 1, "ReadInfFile", szFile$
  444.     end if
  445.     IF FOpenInf(szFile$, 1, 1) = 0 THEN
  446.         StfApiErr saeFail, "ReadInfFile", szFile$
  447. '$else  ''!DEBUG
  448.     IF FOpenInf(szFile$, 1, 0) = 0 THEN
  449. '$endif ''!DEBUG
  450.         ERROR STFERR
  451.     END IF
  452. END SUB
  453.  
  454.  
  455. '*************************************************************************
  456. FUNCTION UIStartDlg(szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) STATIC AS STRING
  457. '$ifdef DEBUG
  458.     if szDll$ = "" then
  459.         n% = 1
  460.     elseif szDlgProc$ = "" then
  461.         n% = 3
  462.     else
  463.         n% = 0
  464.     end if
  465.     if n% > 0 then
  466.         BadArgErr n%, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  467.     end if
  468. '$endif ''DEBUG
  469.  
  470.     IF FDoDialog(HwndFrame(), szDll$, Dlg%, szDlgProc$, HelpDlg%, szHelpProc$) = 0 THEN
  471. '$ifdef DEBUG
  472.         StfApiErr saeFail, "UIStartDlg", szDll$+", "+STR$(Dlg%)+", "+szDlgProc$+", "+STR$(HelpDlg%)+", "+szHelpProc$
  473. '$endif ''DEBUG
  474.         ERROR STFERR
  475.     ELSE
  476.         UIStartDlg = GetSymbolValue("DLGEVENT")
  477.     END IF
  478. END FUNCTION
  479.  
  480.  
  481. '*************************************************************************
  482. SUB UIPop (n%) STATIC
  483.     IF FKillNDialogs(n%) = 0 THEN
  484. '$ifdef DEBUG
  485.         StfApiErr saeFail, "UIPop", STR$(n%)
  486. '$endif ''DEBUG
  487.         ERROR STFERR
  488.     END IF
  489. END SUB
  490.  
  491.  
  492. '*************************************************************************
  493. SUB UIPopAll STATIC
  494.     IF FKillNDialogs(65535) = 0 THEN
  495. '$ifdef DEBUG
  496.         StfApiErr saeFail, "UIPopAll", ""
  497. '$endif ''DEBUG
  498.         ERROR STFERR
  499.     END IF
  500. END SUB
  501.  
  502.  
  503. '*************************************************************************
  504. FUNCTION GetSymbolValue(szSymbol$) STATIC AS STRING
  505. '$ifdef DEBUG
  506.     if szSymbol$ = "" then
  507.         BadArgErr 1, "GetSymbolValue", szSymbol$
  508.     end if
  509. '$endif ''DEBUG
  510.     szValue$ = string$(cbSymValMax,32)
  511.     Length% = CbGetSymbolValue(szSymbol$, szValue$, cbSymValMax)
  512.     GetSymbolValue = szValue$
  513.     IF Length% >= cbSymValMax THEN
  514.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  515.         ERROR STFERR
  516.     END IF
  517.     IF szSymbol$ = "" THEN
  518.         ERROR STFERR
  519.     END IF
  520.     szValue$ = ""
  521. END FUNCTION
  522.  
  523.  
  524. '*************************************************************************
  525. FUNCTION GetListLength(szSymbol$) STATIC AS INTEGER
  526. '$ifdef DEBUG
  527.     if szSymbol$ = "" then
  528.         BadArgErr 1, "GetListLength", szSymbol$
  529.     end if
  530. '$endif ''DEBUG
  531.     GetListLength = UsGetListLength(szSymbol$)
  532.     IF szSymbol$ = "" THEN
  533.         ERROR STFERR
  534.     END IF
  535. END FUNCTION
  536.  
  537.  
  538. '*************************************************************************
  539. FUNCTION GetListItem(szListSymbol$, nItem%) STATIC AS STRING
  540. '$ifdef DEBUG
  541.     if szListSymbol$ = "" then
  542.         BadArgErr 1, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  543.     end if
  544.  
  545.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  546.         BadArgErr 2, "GetListItem", szListSymbol$+", "+STR$(nItem%)
  547.     end if
  548. '$endif ''DEBUG
  549.  
  550.     szListItem$ = string$(cbSymValMax,32)
  551.     Length% = CbGetListItem(szListSymbol$, nItem%, szListItem$, cbSymValMax)
  552.     GetListItem = szListItem$
  553.     IF Length% >= cbSymValMax THEN
  554.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  555.         ERROR STFERR
  556.     END IF
  557.     IF szListSymbol$ = "" THEN
  558.         ERROR STFERR
  559.     END IF
  560.     if nItem% <= 0 or nItem% > GetListLength(szListSymbol$) then
  561.         ERROR STFERR
  562.     end if
  563.     szListItem$ = ""
  564. END FUNCTION
  565.  
  566.  
  567. '*************************************************************************
  568. SUB AddListItem(szSymbol$, szItem$) STATIC
  569. '$ifdef DEBUG
  570.     if szSymbol$ = "" then
  571.         BadArgErr 1, "AddListItem", szSymbol$+", "+szItem$
  572.     end if
  573. '$endif ''DEBUG
  574.     IF FAddListItem(szSymbol$, szItem$) = 0 THEN
  575. '$ifdef DEBUG
  576.         StfApiErr saeFail, "AddListItem", szSymbol$+", "+szItem$
  577. '$endif ''DEBUG
  578.         ERROR STFERR
  579.     END IF
  580. END SUB
  581.  
  582.  
  583. '*************************************************************************
  584. SUB ReplaceListItem(szSymbol$, n%, szItem$) STATIC
  585. '$ifdef DEBUG
  586.     if szSymbol$ = "" then
  587.         nArg% = 1
  588.     elseif (n% <= 0) OR (n% > GetListLength(szSymbol$)) then
  589.         nArg% = 2
  590.     else
  591.         nArg% = 0
  592.     end if
  593.     if nArg% > 0 then
  594.         BadArgErr nArg%, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  595.     end if
  596. '$endif ''DEBUG
  597.  
  598.     IF FReplaceListItem(szSymbol$, n%, szItem$) = 0 THEN
  599. '$ifdef DEBUG
  600.         StfApiErr saeFail, "ReplaceListItem", szSymbol$+", "+STR$(n%)+", "+szItem$
  601. '$endif ''DEBUG
  602.         ERROR STFERR
  603.     END IF
  604. END SUB
  605.  
  606.  
  607. '**************************************************************************
  608. SUB MakeListFromSectionKeys(szSymbol$, szSect$) STATIC
  609. '$ifdef DEBUG
  610.     if szSymbol$ = "" then
  611.         n% = 1
  612.     elseif FValidInfSect(szSect$) = 0 then
  613.         n% = 2
  614.     else
  615.         n% = 0
  616.     end if
  617.     if n% > 0 then
  618.         BadArgErr n%, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  619.     end if
  620. '$endif ''DEBUG
  621.  
  622.     IF FSetSymbolToListOfInfKeys(szSymbol$, szSect$, 1) = 0 THEN
  623. '$ifdef DEBUG
  624.         StfApiErr saeFail, "MakeListFromSectionKeys", szSymbol$+", "+szSect$
  625. '$endif ''DEBUG
  626.         ERROR STFERR
  627.     END IF
  628. END SUB
  629.  
  630.  
  631. '*************************************************************************
  632. SUB SetSymbolValue(szSymbol$, szValue$) STATIC
  633. '$ifdef DEBUG
  634.     if szSymbol$ = "" then
  635.         BadArgErr 1, "SetSymbolValue", szSymbol$+", "+szValue$
  636.     end if
  637. '$endif ''DEBUG
  638.     IF FSetSymbolValue(szSymbol$, szValue$) = 0 THEN
  639. '$ifdef DEBUG
  640.         StfApiErr saeFail, "SetSymbolValue", szSymbol$+", "+szValue$
  641. '$endif ''DEBUG
  642.         ERROR STFERR
  643.     END IF
  644. END SUB
  645.  
  646.  
  647. '*************************************************************************
  648. SUB RemoveSymbol(szSym$) STATIC
  649. '$ifdef DEBUG
  650.     if szSym$ = "" then
  651.         BadArgErr 1, "RemoveSymbol", szSym$
  652.     end if
  653. '$endif ''DEBUG
  654.     IF FRemoveSymbol(szSym$) = 0 THEN
  655. '$ifdef DEBUG
  656.         StfApiErr saeFail, "RemoveSymbol", szSym$
  657. '$endif ''DEBUG
  658.         ERROR STFERR
  659.     END IF
  660. END SUB
  661.  
  662.  
  663. '*************************************************************************
  664. FUNCTION ShowWaitCursor STATIC AS INTEGER
  665.     ShowWaitCursor = HShowWaitCursor
  666. END FUNCTION
  667.  
  668.  
  669. '*************************************************************************
  670. SUB RestoreCursor (hPrev%) STATIC
  671.     i% = FRestoreCursor(hPrev%)
  672.     IF i% = 0 THEN
  673. '$ifdef DEBUG
  674.         StfApiErr saeFail, "RestoreCursor", ""
  675. '$endif ''DEBUG
  676.         ERROR STFERR
  677.     END IF
  678. END SUB
  679.  
  680.  
  681. '*************************************************************************
  682. FUNCTION SetBeepingMode (mode%) STATIC AS INTEGER
  683.     SetBeepingMode = FSetBeepingMode(mode%)
  684. END FUNCTION
  685.  
  686.  
  687. '*************************************************************************
  688. FUNCTION SetSilentMode (mode%) STATIC AS INTEGER
  689.     SetSilentMode = FSetSilent(mode%)
  690. END FUNCTION
  691.  
  692.  
  693. '*************************************************************************
  694. FUNCTION GetSectionKeyDate (szSect$, szKey$) STATIC AS STRING
  695. '$ifdef DEBUG
  696.     if FValidInfSect(szSect$) = 0 then
  697.         n% = 1
  698.     elseif szKey$ = "" then
  699.         n% = 2
  700.     else
  701.         n% = 0
  702.     end if
  703.     if n% > 0 then
  704.         BadArgErr n%, "GetSectionKeyDate", szSect$+", "+szKey$
  705.     end if
  706. '$endif ''DEBUG
  707.  
  708.     szBuf$ = string$(128, 32)
  709.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 5, szBuf$, 128)
  710.     IF Length% >= 128 THEN
  711.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  712.         ERROR STFERR
  713.     END IF
  714.  
  715.     IF Length% = -1 THEN
  716. '$ifdef DEBUG
  717.         StfApiErr saeFail, "GetSectionKeyDate", szSect$+", "+szKey$
  718. '$endif ''DEBUG
  719.         ERROR STFERR
  720.     END IF
  721.  
  722.     GetSectionKeyDate = szBuf$
  723.     szBuf$ = ""
  724. END FUNCTION
  725.  
  726.  
  727. '*************************************************************************
  728. FUNCTION GetSectionKeyFilename (szSect$, szKey$) STATIC AS STRING
  729. '$ifdef DEBUG
  730.     if FValidInfSect(szSect$) = 0 then
  731.         n% = 1
  732.     elseif szKey$ = "" then
  733.         n% = 2
  734.     else
  735.         n% = 0
  736.     end if
  737.     if n% > 0 then
  738.         BadArgErr n%, "GetSectionKeyFilename", szSect$+", "+szKey$
  739.     end if
  740. '$endif ''DEBUG
  741.  
  742.     szBuf$ = string$(128, 32)
  743.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 1, szBuf$, 128)
  744.     IF Length% >= 128 THEN
  745.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  746.         ERROR STFERR
  747.     END IF
  748.  
  749.     IF Length% = -1 THEN
  750. '$ifdef DEBUG
  751.         StfApiErr saeFail, "GetSectionKeyFilename", szSect$+", "+szKey$
  752. '$endif ''DEBUG
  753.         ERROR STFERR
  754.     END IF
  755.  
  756.     GetSectionKeyFilename = szBuf$
  757.     szBuf$ = ""
  758. END FUNCTION
  759.  
  760.  
  761. '*************************************************************************
  762. FUNCTION GetSectionKeySize (szSect$, szKey$) STATIC AS LONG
  763. '$ifdef DEBUG
  764.     if FValidInfSect(szSect$) = 0 then
  765.         n% = 1
  766.     elseif szKey$ = "" then
  767.         n% = 2
  768.     else
  769.         n% = 0
  770.     end if
  771.     if n% > 0 then
  772.         BadArgErr n%, "GetSectionKeySize", szSect$+", "+szKey$
  773.     end if
  774. '$endif ''DEBUG
  775.  
  776.     szBuf$ = string$(128, 32)
  777.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 15, szBuf$, 128)
  778.     IF Length% >= 128 THEN
  779.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  780.         ERROR STFERR
  781.     END IF
  782.  
  783.     IF Length% = -1 THEN
  784. '$ifdef DEBUG
  785.         StfApiErr saeFail, "GetSectionKeySize", szSect$+", "+szKey$
  786. '$endif ''DEBUG
  787.         ERROR STFERR
  788.     END IF
  789.  
  790.     GetSectionKeySize = VAL(szBuf$)
  791.     szBuf$ = ""
  792. END FUNCTION
  793.  
  794.  
  795. '*************************************************************************
  796. FUNCTION GetSectionKeyVersion (szSect$, szKey$) STATIC AS STRING
  797. '$ifdef DEBUG
  798.     if FValidInfSect(szSect$) = 0 then
  799.         n% = 1
  800.     elseif szKey$ = "" then
  801.         n% = 2
  802.     else
  803.         n% = 0
  804.     end if
  805.     if n% > 0 then
  806.         BadArgErr n%, "GetSectionKeyVersion", szSect$+", "+szKey$
  807.     end if
  808. '$endif ''DEBUG
  809.  
  810.     szBuf$ = string$(128, 32)
  811.     Length% = CbGetInfSectionKeyField(szSect$, szKey$, 19, szBuf$, 128)
  812.     IF Length% >= 128 THEN
  813.         res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  814.         ERROR STFERR
  815.     END IF
  816.  
  817.     IF Length% = -1 THEN
  818. '$ifdef DEBUG
  819.         StfApiErr saeFail, "GetSectionKeyVersion", szSect$+", "+szKey$
  820. '$endif ''DEBUG
  821.         ERROR STFERR
  822.     END IF
  823.  
  824.     GetSectionKeyVersion = szBuf$
  825.     szBuf$ = ""
  826. END FUNCTION
  827.  
  828.  
  829. '*************************************************************************
  830. SUB MakeListFromSectionDate (szSym$, szSect$) STATIC
  831. '$ifdef DEBUG
  832.     if szSym$ = "" then
  833.         n% = 1
  834.     elseif FValidInfSect(szSect$) = 0 then
  835.         n% = 2
  836.     else
  837.         n% = 0
  838.     end if
  839.     if n% > 0 then
  840.         BadArgErr n%, "MakeListFromSectionDate", szSym$+", "+szSect$
  841.     end if
  842. '$endif ''DEBUG
  843.  
  844.     IF FMakeListInfSectionField(szSym$, szSect$, 5) = 0 THEN
  845. '$ifdef DEBUG
  846.         StfApiErr saeFail, "MakeListFromSectionDate", szSym$+", "+szSect$
  847. '$endif ''DEBUG
  848.         ERROR STFERR
  849.     END IF
  850. END SUB
  851.  
  852.  
  853. '*************************************************************************
  854. SUB MakeListFromSectionFilename (szSym$, szSect$) STATIC
  855. '$ifdef DEBUG
  856.     if szSym$ = "" then
  857.         n% = 1
  858.     elseif FValidInfSect(szSect$) = 0 then
  859.         n% = 2
  860.     else
  861.         n% = 0
  862.     end if
  863.     if n% > 0 then
  864.         BadArgErr n%, "MakeListFromSectionFilename", szSym$+", "+szSect$
  865.     end if
  866. '$endif ''DEBUG
  867.  
  868.     IF FMakeListInfSectionField(szSym$, szSect$, 1) = 0 THEN
  869. '$ifdef DEBUG
  870.         StfApiErr saeFail, "MakeListFromSectionFilename", szSym$+", "+szSect$
  871. '$endif ''DEBUG
  872.         ERROR STFERR
  873.     END IF
  874. END SUB
  875.  
  876.  
  877. '*************************************************************************
  878. SUB MakeListFromSectionSize (szSym$, szSect$) STATIC
  879. '$ifdef DEBUG
  880.     if szSym$ = "" then
  881.         n% = 1
  882.     elseif FValidInfSect(szSect$) = 0 then
  883.         n% = 2
  884.     else
  885.         n% = 0
  886.     end if
  887.     if n% > 0 then
  888.         BadArgErr n%, "MakeListFromSectionSize", szSym$+", "+szSect$
  889.     end if
  890. '$endif ''DEBUG
  891.  
  892.     IF FMakeListInfSectionField(szSym$, szSect$, 15) = 0 THEN
  893. '$ifdef DEBUG
  894.         StfApiErr saeFail, "MakeListFromSectionSize", szSym$+", "+szSect$
  895. '$endif ''DEBUG
  896.         ERROR STFERR
  897.     END IF
  898. END SUB
  899.  
  900.  
  901. '*************************************************************************
  902. SUB MakeListFromSectionVersion (szSym$, szSect$) STATIC
  903. '$ifdef DEBUG
  904.     if szSym$ = "" then
  905.         n% = 1
  906.     elseif FValidInfSect(szSect$) = 0 then
  907.         n% = 2
  908.     else
  909.         n% = 0
  910.     end if
  911.     if n% > 0 then
  912.         BadArgErr n%, "MakeListFromSectionVersion", szSym$+", "+szSect$
  913.     end if
  914. '$endif ''DEBUG
  915.  
  916.     IF FMakeListInfSectionField(szSym$, szSect$, 19) = 0 THEN
  917. '$ifdef DEBUG
  918.         StfApiErr saeFail, "MakeListFromSectionVersion", szSym$+", "+szSect$
  919. '$endif ''DEBUG
  920.         ERROR STFERR
  921.     END IF
  922. END SUB
  923.  
  924.  
  925. '*************************************************************************
  926. SUB InitInstall STATIC
  927.     IF hSetup > 0 THEN
  928. '$ifdef DEBUG
  929.         StfApiErr saeInit, "InitInstall", ""
  930. '$endif ''DEBUG
  931.     ELSEIF FInitializeInstall(HinstFrame(), HwndFrame()) = 0 THEN
  932. '$ifdef DEBUG
  933.         StfApiErr saeFail, "InitInstall", ""
  934. '$endif ''DEBUG
  935.         END
  936.     END IF
  937. END SUB
  938.  
  939.  
  940. '*************************************************************************
  941. SUB CreateDir (szDir$, cmo%) STATIC
  942. '$ifdef DEBUG
  943.     if FValidFATDir(szDir$) = 0 then
  944.         BadArgErr 1, "CreateDir", szDir$+", "+STR$(cmo%)
  945.     end if
  946. '$endif ''DEBUG
  947.     IF FCreateDir(szDir$, cmo%) = 0 THEN
  948. '$ifdef DEBUG
  949.         StfApiErr saeFail, "CreateDir", szDir$+", "+STR$(cmo%)
  950. '$endif ''DEBUG
  951.         ERROR STFERR
  952.     END IF
  953. END SUB
  954.  
  955.  
  956. '*************************************************************************
  957. SUB RemoveDir (szDir$, cmo%) STATIC
  958. '$ifdef DEBUG
  959.     if FValidFATDir(szDir$) = 0 then
  960.         BadArgErr 1, "RemoveDir", szDir$+", "+STR$(cmo%)
  961.     end if
  962. '$endif ''DEBUG
  963.     IF FRemoveDir(szDir$, cmo%) = 0 THEN
  964. '$ifdef DEBUG
  965.         StfApiErr saeFail, "RemoveDir", szDir$+", "+STR$(cmo%)
  966. '$endif ''DEBUG
  967.         ERROR STFERR
  968.     END IF
  969. END SUB
  970.  
  971.  
  972.  
  973. '*************************************************************************
  974. SUB RemoveIniSection (szFile$, szSect$, cmo%) STATIC
  975. '$ifdef DEBUG
  976.     if FValidIniFile(szFile$) = 0 then
  977.         n% = 1
  978.     elseif FValidInfSect(szSect$) = 0 then
  979.         n% = 2
  980.     else
  981.         n% = 0
  982.     end if
  983.     if n% > 0 then
  984.         BadArgErr n%, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  985.     end if
  986. '$endif ''DEBUG
  987.  
  988.     IF FRemoveIniSection(szFile$, szSect$, cmo%) = 0 THEN
  989. '$ifdef DEBUG
  990.         StfApiErr saeFail, "RemoveIniSection", szFile$+", "+szSect$+", "+STR$(cmo%)
  991. '$endif ''DEBUG
  992.         ERROR STFERR
  993.     END IF
  994. END SUB
  995.  
  996.  
  997. '*************************************************************************
  998. SUB CreateIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  999. '$ifdef DEBUG
  1000.     if FValidIniFile(szFile$) = 0 then
  1001.         n% = 1
  1002.     elseif FValidInfSect(szSect$) = 0 then
  1003.         n% = 2
  1004.     else
  1005.         n% = 0
  1006.     end if
  1007.     if n% > 0 then
  1008.         BadArgErr n%, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1009.     end if
  1010. '$endif ''DEBUG
  1011.  
  1012.     IF FCreateIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1013. '$ifdef DEBUG
  1014.         StfApiErr saeFail, "CreateIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1015. '$endif ''DEBUG
  1016.         ERROR STFERR
  1017.     END IF
  1018. END SUB
  1019.  
  1020.  
  1021. '*************************************************************************
  1022. SUB RemoveIniKey (szFile$, szSect$, szKey$, cmo%) STATIC
  1023. '$ifdef DEBUG
  1024.     if FValidIniFile(szFile$) = 0 then
  1025.         n% = 1
  1026.     elseif FValidInfSect(szSect$) = 0 then
  1027.         n% = 2
  1028.     elseif szKey$ = "" then
  1029.         n% = 3
  1030.     else
  1031.         n% = 0
  1032.     end if
  1033.     if n% > 0 then
  1034.         BadArgErr n%, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1035.     end if
  1036. '$endif ''DEBUG
  1037.  
  1038.     IF FRemoveIniKey(szFile$, szSect$, szKey$, cmo%) = 0 THEN
  1039. '$ifdef DEBUG
  1040.         StfApiErr saeFail, "RemoveIniKey", szFile$+", "+szSect$+", "+szKey$+", "+STR$(cmo%)
  1041. '$endif ''DEBUG
  1042.         ERROR STFERR
  1043.     END IF
  1044. END SUB
  1045.  
  1046.  
  1047. '*************************************************************************
  1048. SUB CreateSysIniKeyValue (szFile$, szSect$, szKey$, szValue$, cmo%) STATIC
  1049. '$ifdef DEBUG
  1050.     if FValidFATPath(szFile$) = 0 then
  1051.         n% = 1
  1052.     elseif FValidInfSect(szSect$) = 0 then
  1053.         n% = 2
  1054.     elseif szKey$ = "" then
  1055.         n% = 3
  1056.     else
  1057.         n% = 0
  1058.     end if
  1059.     if n% > 0 then
  1060.         BadArgErr n%, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1061.     end if
  1062. '$endif ''DEBUG
  1063.  
  1064.     IF FCreateSysIniKeyValue(szFile$, szSect$, szKey$, szValue$, cmo%) = 0 THEN
  1065. '$ifdef DEBUG
  1066.         StfApiErr saeFail, "CreateSysIniKeyValue", szFile$+", "+szSect$+", "+szKey$+", "+szValue$+", "+STR$(cmo%)
  1067. '$endif ''DEBUG
  1068.         ERROR STFERR
  1069.     END IF
  1070. END SUB
  1071.  
  1072.  
  1073. '*************************************************************************
  1074. SUB CreateProgmanGroup (szGroup$, szPath$, cmo%) STATIC
  1075. '$ifdef DEBUG
  1076.     if szGroup$ = "" or len(szGroup$) > 24 then
  1077.         BadArgErr 1, "CreateProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1078.     end if
  1079. '$endif ''DEBUG
  1080.     IF FCreateProgManGroup(szGroup$, szPath$, cmo%) = 0 THEN
  1081. '$ifdef DEBUG
  1082.         StfApiErr saeFail, "CreateProgmanGroup", szGroup$+", "+szPath$+", "+STR$(cmo%)
  1083. '$endif ''DEBUG
  1084.         ERROR STFERR
  1085.     END IF
  1086. END SUB
  1087.  
  1088.  
  1089. '*************************************************************************
  1090. SUB ShowProgmanGroup (szGroup$, Cmd%, cmo%) STATIC
  1091. '$ifdef DEBUG
  1092.     if szGroup$ = "" or len(szGroup$) > 24 then
  1093.         BadArgErr 1, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1094.     end if
  1095. '$endif ''DEBUG
  1096.     IF FShowProgManGroup(szGroup$, STR$(Cmd%), cmo%) = 0 THEN
  1097. '$ifdef DEBUG
  1098.         StfApiErr saeFail, "ShowProgmanGroup", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1099. '$endif ''DEBUG
  1100.         ERROR STFERR
  1101.     END IF
  1102. END SUB
  1103.  
  1104.  
  1105. '*************************************************************************
  1106. SUB StampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) STATIC
  1107. '$ifdef DEBUG
  1108.     if FValidInfSect(szSect$) = 0 then
  1109.         n% = 1
  1110.     elseif szKey$ = "" then
  1111.         n% = 2
  1112.     elseif FValidFATDir(szDst$) = 0 then
  1113.         n% = 3
  1114.     else
  1115.         n% = 0
  1116.     end if
  1117.     if n% > 0 then
  1118.         BadArgErr n%, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1119.     end if
  1120. '$endif ''DEBUG
  1121.  
  1122.     IF FStampResource (szSect$, szKey$, szDst$, wResType%, wResId%, szData$, cbData%) = 0 THEN
  1123. '$ifdef DEBUG
  1124.         StfApiErr saeFail, "StampResource", szSect$+", "+szKey$+", "+szDst$+", "+STR$(wResType%)+", "+STR$(wResId%)+", "+szData$+", "+STR$(cbData%)
  1125. '$endif ''DEBUG
  1126.         ERROR STFERR
  1127.     END IF
  1128. END SUB
  1129.  
  1130.  
  1131. '*************************************************************************
  1132. SUB DumpCopyList (szFile$) STATIC
  1133. '$ifdef DEBUG
  1134.     if szFile$ = "" then
  1135.         BadArgErr 1, "DumpCopyList", szFile$
  1136.     end if
  1137. '$endif ''DEBUG
  1138.     IF FDumpCopyListToFile (szFile$) = 0 THEN
  1139. '$ifdef DEBUG
  1140.         StfApiErr saeFail, "DumpCopyList", szFile$
  1141. '$endif ''DEBUG
  1142.         ERROR STFERR
  1143.     END IF
  1144. END SUB
  1145.  
  1146.  
  1147. '*************************************************************************
  1148. SUB ClearCopyList STATIC
  1149.     ResetCopyList
  1150. END SUB
  1151.  
  1152.  
  1153. '*************************************************************************
  1154. FUNCTION GetCopyListCost (szExtraList$, szCostList$, szNeedList$) STATIC AS LONG
  1155.     lNeed& = LcbGetCopyListCost (szExtraList$, szCostList$, szNeedList$)
  1156.     IF lNeed& < 0 THEN
  1157. '$ifdef DEBUG
  1158.         StfApiErr saeFail, "GetCopyListCost", szExtraList$+", "+szCostList$+", "+szNeedList$
  1159. '$endif ''DEBUG
  1160.         ERROR STFERR
  1161.     END IF
  1162.     GetCopyListCost = lNeed&
  1163. END FUNCTION
  1164.  
  1165.  
  1166. '*************************************************************************
  1167. SUB CreateProgmanItem (szGroup$, szItem$, szCmd$, szOther$, cmo%) STATIC
  1168.     szItemNew$ = szItem$
  1169.     IF szOther$ <> "" THEN
  1170.         szItemNew$ = szItem$ + "," + szOther$
  1171.     END IF
  1172. '$ifdef DEBUG
  1173.     if szGroup$ = "" or len(szGroup$) > 24 then
  1174.         BadArgErr 1, "CreateProgmanItem", szGroup$+", "+STR$(Cmd%)+", "+STR$(cmo%)
  1175.     end if
  1176. '$endif ''DEBUG
  1177.  
  1178.     IF FCreateProgManItem(szGroup$, szItemNew$, szCmd$, cmo%) = 0 THEN
  1179. '$ifdef DEBUG
  1180.         StfApiErr saeFail, "CreateProgmanItem", szGroup$+", "+szItem$+", "+szCmd$+", "+szOther$+", "+STR$(cmo%)
  1181. '$endif ''DEBUG
  1182.         ERROR STFERR
  1183.     END IF
  1184.     szItemNew$ = ""
  1185. END SUB
  1186.  
  1187.  
  1188. '*************************************************************************
  1189. SUB AddDos5Help (szProgName$, szProgHelp$, cmo%) STATIC
  1190. '$ifdef DEBUG
  1191.     if szProgName$ = "" OR MID$(szProgName$, 1, 1) = "@" OR LEN(szProgName$) > 8 then
  1192.         n% = 1
  1193.     elseif INSTR(szProgName$, " ") <> 0 OR INSTR(szProgName$, CHR$(9)) <> 0 then
  1194.         n% = 1
  1195.     elseif szProgHelp$ = "" then
  1196.         n% = 2
  1197.     else
  1198.         n% = 0
  1199.     end if
  1200.     if n% > 0 then
  1201.         BadArgErr n%, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1202.     end if
  1203. '$endif ''DEBUG
  1204.     IF FAddDos5Help (szProgName$, szProgHelp$, cmo%) = 0 THEN
  1205. '$ifdef DEBUG
  1206.         StfApiErr saeFail, "AddDos5Help", szProgName$+", "+szProgHelp$+", "+STR$(cmo%)
  1207. '$endif ''DEBUG
  1208.         ERROR STFERR
  1209.     END IF
  1210. END SUB
  1211.  
  1212.  
  1213. '*************************************************************************
  1214. SUB CopyFilesInCopyList STATIC
  1215.     grc% = GrcCopyFilesInCopyList (HinstFrame())
  1216.  
  1217.     IF grc% = grcUserQuit THEN
  1218.         ERROR STFQUIT
  1219.     ELSEIF grc% > 0 THEN
  1220. '$ifdef DEBUG
  1221.         StfApiErr saeFail, "CopyFilesInCopyList", ""
  1222. '$endif ''DEBUG
  1223.         ERROR STFERR
  1224.     END IF
  1225. END SUB
  1226.  
  1227.  
  1228. '*************************************************************************
  1229. SUB CopyFile (szFullPathSrc$, szFullPathDst$, cmo%, fAppend%) STATIC
  1230. '$ifdef DEBUG
  1231.     if FValidFATPath(szFullPathSrc$) = 0 then
  1232.         n% = 1
  1233.     elseif FValidFATPath(szFullPathDst$) = 0 then
  1234.         n% = 2
  1235.     else
  1236.         n% = 0
  1237.     end if
  1238.     if n% > 0 then
  1239.         BadArgErr n%, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1240.     end if
  1241. '$endif ''DEBUG
  1242.  
  1243.     IF  FCopyOneFile(szFullPathSrc$, szFullPathDst$, (cmo OR cmoCopy), fAppend%) = 0 THEN
  1244. '$ifdef DEBUG
  1245.         StfApiErr saeFail, "CopyFile", szFullPathSrc$+", "+szFullPathDst$+", "+STR$(cmo%)+", "+STR$(fAppend%)
  1246. '$endif ''DEBUG
  1247.         ERROR STFERR
  1248.     END IF
  1249. END SUB
  1250.  
  1251.  
  1252.  
  1253. '*************************************************************************
  1254. SUB RemoveFile (szFullPathSrc$, cmo%) STATIC
  1255. '$ifdef DEBUG
  1256.     if FValidFATPath(szFullPathSrc$) = 0 then
  1257.         BadArgErr 1, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1258.     end if
  1259. '$endif ''DEBUG
  1260.     IF  YnrcRemoveFile(szFullPathSrc$, cmo%) = ynrcNo THEN
  1261. '$ifdef DEBUG
  1262.         StfApiErr saeFail, "RemoveFile", szFullPathSrc$+", "+STR$(cmo%)
  1263. '$endif ''DEBUG
  1264.         ERROR STFERR
  1265.     END IF
  1266. END SUB
  1267.  
  1268.  
  1269. '*************************************************************************
  1270. SUB BackupFile (szFullPath$, szBackup$) STATIC
  1271. '$ifdef DEBUG
  1272.     if FValidFATPath(szFullPath$) = 0 then
  1273.         n% = 1
  1274.     elseif szBackup$ = "" then
  1275.         n% = 2
  1276.     else
  1277.         n% = 0
  1278.     end if
  1279.     if n% > 0 then
  1280.         BadArgErr n%, "BackupFile", szFullPath$+", "+szBackup$
  1281.     end if
  1282. '$endif ''DEBUG
  1283.  
  1284.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1285. '$ifdef DEBUG
  1286.         StfApiErr saeFail, "BackupFile", szFullPath$+", "+szBackup$
  1287. '$endif ''DEBUG
  1288.         ERROR STFERR
  1289.     END IF
  1290. END SUB
  1291.  
  1292.  
  1293. '*************************************************************************
  1294. SUB RenameFile (szFullPath$, szBackup$) STATIC
  1295. '$ifdef DEBUG
  1296.     if FValidFATPath(szFullPath$) = 0 then
  1297.         n% = 1
  1298.     elseif szBackup$ = "" then
  1299.         n% = 2
  1300.     else
  1301.         n% = 0
  1302.     end if
  1303.     if n% > 0 then
  1304.         BadArgErr n%, "RenameFile", szFullPath$+", "+szBackup$
  1305.     end if
  1306. '$endif ''DEBUG
  1307.  
  1308.     IF YnrcBackupFile(szFullPath$, szBackup$, cmoNone) = ynrcNo THEN
  1309. '$ifdef DEBUG
  1310.         StfApiErr saeFail, "RenameFile", szFullPath$+", "+szBackup$
  1311. '$endif ''DEBUG
  1312.         ERROR STFERR
  1313.     END IF
  1314. END SUB
  1315.  
  1316.  
  1317. '*************************************************************************
  1318. SUB AddSectionFilesToCopyList (szSect$, szSrc$, szDest$) STATIC
  1319. '$ifdef DEBUG
  1320.     if FValidInfSect(szSect$) = 0 then
  1321.         n% = 1
  1322.     elseif FValidFATDir(szSrc$) = 0 then
  1323.         n% = 2
  1324.     elseif FValidFATDir(szDest$) = 0 then
  1325.         n% = 3
  1326.     else
  1327.         n% = 0
  1328.     end if
  1329.     if n% > 0 then
  1330.         BadArgErr n%, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1331.     end if
  1332. '$endif ''DEBUG
  1333.  
  1334.     IF FAddSectionFilesToCopyList (szSect$, szSrc$, szDest$) = 0 THEN
  1335. '$ifdef DEBUG
  1336.         StfApiErr saeFail, "AddSectionFilesToCopyList", szSect$+", "+szSrc$+", "+szDest$
  1337. '$endif ''DEBUG
  1338.         ERROR STFERR
  1339.     END IF
  1340. END SUB
  1341.  
  1342.  
  1343. '*************************************************************************
  1344. SUB AddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1345. '$ifdef DEBUG
  1346.     if FValidInfSect(szSect$) = 0 then
  1347.         n% = 1
  1348.     elseif szKey$ = "" then
  1349.         n% = 2
  1350.     elseif FValidFATDir(szSrc$) = 0 then
  1351.         n% = 3
  1352.     elseif FValidFATDir(szDest$) = 0 then
  1353.         n% = 4
  1354.     else
  1355.         n% = 0
  1356.     end if
  1357.     if n% > 0 then
  1358.         BadArgErr n%, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1359.     end if
  1360. '$endif ''DEBUG
  1361.  
  1362.     IF FAddSectionKeyFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1363. '$ifdef DEBUG
  1364.         StfApiErr saeFail, "AddSectionKeyFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1365. '$endif ''DEBUG
  1366.         ERROR STFERR
  1367.     END IF
  1368. END SUB
  1369.  
  1370.  
  1371. '*************************************************************************
  1372. SUB AddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) STATIC
  1373. '$ifdef DEBUG
  1374.     if FValidInfSect(szSect$) = 0 then
  1375.         n% = 1
  1376.     elseif szKey$ = "" then
  1377.         n% = 2
  1378.     elseif FValidFATDir(szSrc$) = 0 then
  1379.         n% = 3
  1380.     elseif FValidFATPath(szDest$) = 0 then
  1381.         n% = 4
  1382.     else
  1383.         n% = 0
  1384.     end if
  1385.     if n% > 0 then
  1386.         BadArgErr n%, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1387.     end if
  1388. '$endif ''DEBUG
  1389.  
  1390.     IF FAddSpecialFileToCopyList (szSect$, szKey$, szSrc$, szDest$) = 0 THEN
  1391. '$ifdef DEBUG
  1392.         StfApiErr saeFail, "AddSpecialFileToCopyList", szSect$+", "+szKey$+", "+szSrc$+", "+szDest$
  1393. '$endif ''DEBUG
  1394.         ERROR STFERR
  1395.     END IF
  1396. END SUB
  1397.  
  1398.  
  1399. '*************************************************************************
  1400. SUB AddToBillboardList (szDll$, idDlg%, szProc$, lTicks&) STATIC
  1401. '$ifdef DEBUG
  1402.     if szDll$ = "" then
  1403.         n% = 1
  1404.     elseif idDlg% = 0 then
  1405.         n% = 2
  1406.     elseif szProc$ = "" then
  1407.         n% = 3
  1408.     elseif lTicks& <= 0 then
  1409.         n% = 4
  1410.     else
  1411.         n% = 0
  1412.     end if
  1413.     if n% > 0 then
  1414.         BadArgErr n%, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1415.     end if
  1416. '$endif ''DEBUG
  1417.  
  1418.     IF FAddToBillboardList(szDll$, idDlg%, szProc$, lTicks&) = 0 THEN
  1419. '$ifdef DEBUG
  1420.         StfApiErr saeFail, "AddToBillboardList", szDll$+", "+STR$(idDlg%)+", "+szProc$+", "+STR$(lTicks&)
  1421. '$endif ''DEBUG
  1422.         ERROR STFERR
  1423.     END IF
  1424. END SUB
  1425.  
  1426.  
  1427. '*************************************************************************
  1428. SUB AddBlankToBillboardList (lTicks&) STATIC
  1429. '$ifdef DEBUG
  1430.     if lTicks& <= 0 then
  1431.         BadArgErr 1, "AddBlankToBillboardList", STR$(lTicks&)
  1432.     end if
  1433. '$endif ''DEBUG
  1434.     IF FAddToBillboardList(NULL, 0, NULL, lTicks&) = 0 THEN
  1435. '$ifdef DEBUG
  1436.         StfApiErr saeFail, "AddBlankToBillboardList", STR$(lTicks&)
  1437. '$endif ''DEBUG
  1438.         ERROR STFERR
  1439.     END IF
  1440. END SUB
  1441.  
  1442.  
  1443. '*************************************************************************
  1444. SUB ClearBillboardList STATIC
  1445.     IF FClearBillboardList = 0 THEN
  1446. '$ifdef DEBUG
  1447.         StfApiErr saeFail, "ClearBillboardList", ""
  1448. '$endif ''DEBUG
  1449.         ERROR STFERR
  1450.     END IF
  1451. END SUB
  1452.  
  1453.  
  1454. '*************************************************************************
  1455. SUB OpenLogFile (szFile$, fAppend%) STATIC
  1456. '$ifdef DEBUG
  1457.     if FValidFATPath(szFile$) = 0 then
  1458.         BadArgErr 1, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1459.     end if
  1460. '$endif ''DEBUG
  1461.     IF FOpenLogFile(szFile$, fAppend%) = 0 THEN
  1462. '$ifdef DEBUG
  1463.         StfApiErr saeFail, "OpenLogFile", szFile$+", "+STR$(fAppend%)
  1464. '$endif ''DEBUG
  1465.         ERROR STFERR
  1466.     END IF
  1467. END SUB
  1468.  
  1469.  
  1470. '*************************************************************************
  1471. SUB CloseLogFile STATIC
  1472.     IF FCloseLogFile() = 0 THEN
  1473. '$ifdef DEBUG
  1474.         StfApiErr saeFail, "CloseLogFile", ""
  1475. '$endif ''DEBUG
  1476.         ERROR STFERR
  1477.     END IF
  1478. END SUB
  1479.  
  1480.  
  1481. '*************************************************************************
  1482. SUB WriteToLogFile (szStr$) STATIC
  1483.     IF FWriteToLogFile(szStr$, 1) = 0 THEN
  1484. '$ifdef DEBUG
  1485.         StfApiErr saeFail, "WriteToLogFile", szStr$
  1486. '$endif ''DEBUG
  1487.         ERROR STFERR
  1488.     END IF
  1489. END SUB
  1490.  
  1491.  
  1492. ''' -1 in either parameter will mean 'center in frame client area'
  1493. '*************************************************************************
  1494. SUB SetCopyGaugePosition (x%, y%) STATIC
  1495.     ProSetPos x%, y%
  1496. END SUB
  1497.  
  1498.  
  1499. '*************************************************************************
  1500. FUNCTION FindFileUsingFileOpen (szFile$) STATIC AS STRING
  1501.     szBuf$ = STRING$(512, 32)
  1502.  
  1503.     wRet% = WFindFileUsingFileOpen(szFile$, szBuf$, len(szBuf$))
  1504.     IF wRet% = 0 THEN
  1505.         FindFileUsingFileOpen = szBuf$
  1506.     ELSEIF wRet% = 1 THEN
  1507.         FindFileUsingFileOpen = ""
  1508.     ELSE
  1509. '$ifdef DEBUG
  1510.         StfApiErr saeFail, "FindFileUsingFileOpen", szFile$
  1511. '$endif ''DEBUG
  1512.         ERROR STFERR
  1513.     END IF
  1514.  
  1515.     szBuf$ = ""
  1516. END FUNCTION
  1517.  
  1518.  
  1519. '*************************************************************************
  1520. FUNCTION IsDirWritable (szDir$) STATIC AS INTEGER
  1521.     IsDirWritable = FIsDirWritable(szDir$)
  1522. END FUNCTION
  1523.  
  1524.  
  1525. '*************************************************************************
  1526. FUNCTION IsFileWritable (szFile$) STATIC AS INTEGER
  1527. '$ifdef DEBUG
  1528.     if FValidFATDir(szFile$) = 0 then
  1529.         BadArgErr 1, "IsFileWritable", szFile$
  1530.     end if
  1531. '$endif ''DEBUG
  1532.     IsFileWritable = FIsFileWritable(szFile$)
  1533. END FUNCTION
  1534.  
  1535.  
  1536. '*************************************************************************
  1537. FUNCTION GetNthFieldFromIniString (szLine$, iField%) STATIC AS STRING
  1538.     IF iField% < 1 THEN
  1539. '$ifdef DEBUG
  1540.         StfApiErr saeFail, "GetNthFieldFromIniString", szLine$+", "+STR$(iField%)
  1541. '$endif ''DEBUG
  1542.         ERROR STFERR
  1543.     END IF
  1544.     szStart$ = szLine$
  1545.     IF iField% <> 1 THEN
  1546.         FOR i% = 2 TO iField% STEP 1
  1547.             iNew% = INSTR(szStart$, ",")
  1548.             IF iNew% = 0 THEN
  1549.                 GetNthFieldFromIniString = ""
  1550.                 GOTO _GNFFIS_END
  1551.             END IF
  1552.             szStart$ = MID$(szStart$, (iNew% + 1))
  1553.         NEXT
  1554.     END IF
  1555.  
  1556.     iNew% = INSTR(szStart$, ",")
  1557.     IF iNew% <> 0 THEN
  1558.         szStart$ = MID$(szStart$, 1, (iNew% - 1))
  1559.     END IF
  1560.  
  1561.     GetNthFieldFromIniString = LTRIM$(RTRIM$(szStart$))
  1562.  
  1563. _GNFFIS_END:
  1564.  
  1565. END FUNCTION
  1566.  
  1567.  
  1568. '*************************************************************************
  1569. FUNCTION GetWindowsMajorVersion STATIC AS INTEGER
  1570.     GetWindowsMajorVersion = GetVersion() MOD 256
  1571. END FUNCTION
  1572.  
  1573.  
  1574. '*************************************************************************
  1575. FUNCTION GetWindowsMinorVersion STATIC AS INTEGER
  1576.     GetWindowsMinorVersion = GetVersion() / 256
  1577. END FUNCTION
  1578.  
  1579.  
  1580. '*************************************************************************
  1581. FUNCTION GetWindowsMode STATIC AS INTEGER
  1582.     GetWindowsMode = 0
  1583.     longTmp& = GetWinFlags()
  1584.     IF longTmp& AND WF_STANDARD THEN
  1585.         GetWindowsMode = 1
  1586.     ELSEIF longTmp& AND WF_ENHANCED THEN
  1587.         GetWindowsMode = 2
  1588.     END IF
  1589. END FUNCTION
  1590.  
  1591.  
  1592. '*************************************************************************
  1593. FUNCTION GetWindowsDir STATIC AS STRING
  1594.     szBuf$ = string$(256, 32)
  1595.     cbBuf% = GetWindowsDirectory(szBuf$, 256)
  1596.  
  1597.     IF cbBuf% = 0 THEN
  1598.         GetWindowsDir = ""
  1599. '$ifdef DEBUG
  1600.         StfApiErr saeFail, "GetWindowsDir", ""
  1601. '$endif ''DEBUG
  1602.         ERROR STFERR
  1603.     ELSE
  1604.         IF cbBuf% > 255 THEN
  1605.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1606.             ERROR STFERR
  1607.         END IF
  1608.         szBuf$ = RTRIM$(szBuf$)
  1609.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1610.             'szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1611.             szBuf$ = MID$(GetWindowsSysDir, 1, 2) + szBuf$
  1612.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1613.             szBuf$ = MID$(GetWindowsSysDir, 1, 3) + szBuf$
  1614.         END IF
  1615.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1616.             szBuf$ = szBuf$ + "\"
  1617.         END IF
  1618.         GetWindowsDir = szBuf$
  1619.     END IF
  1620.  
  1621.     szBuf$ = ""
  1622. END FUNCTION
  1623.  
  1624.  
  1625. '*************************************************************************
  1626. FUNCTION GetWindowsSysDir STATIC AS STRING
  1627.     szBuf$ = string$(256, 32)
  1628.     cbBuf% = GetSystemDirectory(szBuf$, 256)
  1629.  
  1630.     IF cbBuf% = 0 THEN
  1631. '$ifdef DEBUG
  1632.         StfApiErr saeFail, "GetWindowsSysDir", ""
  1633. '$endif ''DEBUG
  1634.         ERROR STFERR
  1635.     ELSE
  1636.         IF cbBuf% > 255 THEN
  1637.             res% = DoMsgBox("Buffer Overflow", "MS-Setup Error", MB_ICONHAND+MB_OK)
  1638.             ERROR STFERR
  1639.         END IF
  1640.         szBuf$ = RTRIM$(szBuf$)
  1641.         IF MID$(szBuf$, 1, 1) = "\" THEN
  1642.             szBuf$ = MID$(CURDIR$, 1, 2) + szBuf$
  1643.         ELSEIF MID$(szBuf$, 2, 1) <> ":" THEN
  1644.             szBuf$ = MID$(CURDIR$, 1, 3) + szBuf$
  1645.         END IF
  1646.         IF MID$(szBuf$, LEN(szBuf$), 1) <> "\" THEN
  1647.             szBuf$ = szBuf$ + "\"
  1648.         END IF
  1649.         GetWindowsSysDir = szBuf$
  1650.     END IF
  1651.  
  1652.     szBuf$ = ""
  1653. END FUNCTION
  1654.  
  1655.  
  1656. '*************************************************************************
  1657. FUNCTION IsWindowsShared STATIC AS INTEGER
  1658.     szWin$ = UCASE$(GetWindowsDir())
  1659.     szSys$ = UCASE$(GetWindowsSysDir())
  1660.  
  1661.     IF len(szWin$) = 0 THEN
  1662. '$ifdef DEBUG
  1663.         StfApiErr saeFail, "IsWindowsShared", ""
  1664. '$endif ''DEBUG
  1665.         ERROR STFERR
  1666.     END IF
  1667.  
  1668.     IF len(szSys$) <= len(szWin$) THEN
  1669.         IsWindowsShared = 1
  1670.     ELSE
  1671.         szSys$ = MID$(szSys$, 1, len(szWin$))
  1672.         IF szWin$ = szSys$ THEN
  1673.             IsWindowsShared = 0
  1674.         ELSE
  1675.             IsWindowsShared = 1
  1676.         END IF
  1677.     END IF
  1678. END FUNCTION
  1679.  
  1680.  
  1681. '*************************************************************************
  1682. FUNCTION GetScreenWidth STATIC AS INTEGER
  1683.     GetScreenWidth = GetSystemMetrics(SM_CXSCREEN)
  1684. END FUNCTION
  1685.  
  1686.  
  1687. '*************************************************************************
  1688. FUNCTION GetScreenHeight STATIC AS INTEGER
  1689.     GetScreenHeight = GetSystemMetrics(SM_CYSCREEN)
  1690. END FUNCTION
  1691.  
  1692.  
  1693. '*************************************************************************
  1694. SUB SetRestartDir (szDir$) STATIC
  1695. '$ifdef DEBUG
  1696.     if FValidFATDir(szDir$) = 0 then
  1697.         BadArgErr 1, "SetRestartDir", szDir$
  1698.     end if
  1699. '$endif ''DEBUG
  1700.     IF FSetRestartDir(szDir$) = 0 THEN
  1701. '$ifdef DEBUG
  1702.         StfApiErr saeFail, "SetRestartDir", szDir$
  1703. '$endif ''DEBUG
  1704.         ERROR STFERR
  1705.     END IF
  1706. END SUB
  1707.  
  1708.  
  1709. '*************************************************************************
  1710. FUNCTION RestartListEmpty STATIC AS INTEGER
  1711.     IF FRestartListEmpty() = 0 THEN
  1712.         RestartListEmpty = 0
  1713.     ELSE
  1714.         RestartListEmpty = 1
  1715.     END IF
  1716. END FUNCTION
  1717.  
  1718.  
  1719. '*************************************************************************
  1720. FUNCTION ExitExecRestart STATIC AS INTEGER
  1721.     ExitExecRestart = FExitExecRestart
  1722. END FUNCTION
  1723.  
  1724.  
  1725. '*************************************************************************
  1726. SUB PrependToPath (szSrc$, szDst$, szDir$, cmo%) STATIC
  1727.  
  1728. '$ifdef DEBUG
  1729.     if (FValidFATPath(szSrc$) = 0) AND (szSrc$ <> "") then
  1730.         n% = 1
  1731.     elseif FValidFATPath(szDst$) = 0 then
  1732.         n% = 2
  1733.     elseif FValidFATDir(szDir$) = 0 then
  1734.         n% = 3
  1735.     else
  1736.         n% = 0
  1737.     end if
  1738.     if n% > 0 then
  1739.         BadArgErr n%, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1740.     end if
  1741. '$endif ''DEBUG
  1742.  
  1743.     IF FPrependToPath (szSrc$, szDst$, szDir$, cmo%) = 0 THEN
  1744. '$ifdef DEBUG
  1745.         StfApiErr saeFail, "PrependToPath", szSrc$+", "+szDst$+", "+szDir$+", "+STR$(cmo%)
  1746. '$endif ''DEBUG
  1747.         ERROR STFERR
  1748.     END IF
  1749. END SUB
  1750.  
  1751.  
  1752.  
  1753. '**************************************************************************
  1754. '***************************  Error Handlers  *****************************
  1755. '**************************************************************************
  1756.  
  1757.  
  1758. '$ifdef DEBUG
  1759. '**************************************************************************
  1760. SUB StfApiErr (nMsg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1761.     select case nMsg%
  1762.         case saeFail
  1763.             lpText$ = "Failed"
  1764.         case saeInit
  1765.             lpText$ = "Already Initialized"
  1766.         case saeNYI
  1767.             lpText$ = "NYI"
  1768.         case else
  1769.             lpText$ = "Bad Arg "+LTRIM$(STR$(nMsg% - saeArg))
  1770.     end select
  1771.  
  1772.     lpText$ = lpText$ + ": "+ szApi$
  1773.     if szArgs$ <> "" then
  1774.         lpText$ = lpText + " (" + szArgs$ + ")"
  1775.     end if
  1776.     lpCaption$ = "MS-Setup Toolkit API Error"
  1777.     res% = DoMsgBox(lpText$, lpCaption$, MB_TASKMODAL+MB_ICONHAND+MB_OK)
  1778.     print lpText$
  1779.     lpText$ = ""
  1780.     lpCaption$ = ""
  1781. END SUB
  1782.  
  1783. '**************************************************************************
  1784. SUB BadArgErr (nArg%, szApi$, szArgs$) STATIC      ''DEBUG only
  1785.     StfApiErr nArg%+saeArg, szApi$, szArgs$
  1786.     ERROR STFERR
  1787. END SUB
  1788.  
  1789.  
  1790. '** REVIEW: Move this function into common lib (we'll need it there too)
  1791. '**************************************************************************
  1792. FUNCTION FValidInfSect (szSect$) STATIC AS INTEGER
  1793.     if (szSect$ = "") OR (INSTR(1,szSect$,"]") <> 0) then
  1794.         FValidInfSect = 0
  1795.     else
  1796.         FValidInfSect = 1
  1797.     end if
  1798. END FUNCTION
  1799.  
  1800.  
  1801. '** REVIEW: Move this function into common lib (we'll need it there too)
  1802. '**************************************************************************
  1803. FUNCTION FValidIniFile (szFile$) STATIC AS INTEGER
  1804.     if (FValidFATPath(szFile$) = 0) AND (UCASE$(szFile$) <> "WIN.INI") then
  1805.         FValidIniFile = 0
  1806.     else
  1807.         FValidIniFile = 1
  1808.     end if
  1809. END FUNCTION
  1810.  
  1811. '**************************************************************************
  1812. FUNCTION FValidDrive (szDrive$) STATIC AS INTEGER
  1813.  
  1814.     if szDrive$ = "" then
  1815.         FValidDrive = 0
  1816.     elseif INSTR(1,szDrive$,"\\") = 1 then   ' UNC path
  1817.         FValidDrive = 1
  1818.     elseif ASC(UCASE$(szDrive$)) - ASC("A") < 0 then
  1819.         FValidDrive = 0
  1820.     elseif ASC(UCASE$(szDrive$)) - ASC("A") > 25 then
  1821.         FValidDrive = 0
  1822.     elseif LEN(szDrive$) = 1 then
  1823.         FValidDrive = 1
  1824.     elseif INSTR(2,szDrive$,":\") = 2 then
  1825.         FValidDrive = 1
  1826.     elseif INSTR(1,szDrive$,":") = 2 then
  1827.         FValidDrive = 1
  1828.     else
  1829.         FValidDrive = 0
  1830.     end if
  1831. END FUNCTION
  1832.  
  1833. '$endif ''DEBUG
  1834.  
  1835.  
  1836. TRAP CleanupTrap From "MSSHLSTF.DLL"
  1837.  
  1838. End Trap
  1839.  
  1840. hSetup = InitSetup(COMMAND$)
  1841.  
  1842. ON ERROR GOTO QUIT
  1843.  
  1844.